<!DOCTYPE html>
<html lang="zh-cn">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">




<title>oAuth | Miles`s</title>

<link rel="stylesheet" href="https://mada.gitee.io/notes//css/styles.css">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" 
integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>


<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/zenburn.min.css" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js" integrity="sha256-/BfiIkHlHoVihZdc6TFuj7MmJ0TWcWsMXkeDFwhi0zw=" crossorigin="anonymous"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://mada.gitee.io/notes//js/highlight.js"></script>






<div class="container">
    <nav class="navbar level">
      <div class="navbar-brand">
          <a class="nav-item" href="https://mada.gitee.io/notes/"><h1 class="title is-3">Miles`s</h1></a>
      </div>           
      <div class="navbar-menu has-text-centered is-active">
          <div class="navbar-end is-centered">
              
           </div>
      </div>
    </nav>
  </div>
<div class="container">
  <h2 class="subtitle is-6">August 3, 2016</h2>
  <h1 class="subtitle is-size-4-mobile is-size-3-desktop">oAuth</h1>
  <div class="content">
    

<h3 id="oauth2-0">oAuth2.0</h3>

<h4 id="运行流程">运行流程</h4>

<ol>
<li>用户打开客户端以后，客户端要求用户给予授权</li>
<li>用户同意给予客户端授权</li>
<li>客户端使用上一步获得的授权，向认证服务器申请令牌</li>
<li>认证服务器对客户端进行认证以后，确认无误，同意发放令牌</li>
<li>客户端使用令牌，向资源服务器申请获取资源</li>
<li>资源服务器确认令牌无误，同意向客户端开放资源</li>
</ol>

<h4 id="客户端的授权模式">客户端的授权模式</h4>

<p>OAhth2.0定义了四种授权方式</p>

<ul>
<li>授权码模式</li>
<li>简化模式</li>
<li>密码模式</li>
<li>客户端模式</li>
</ul>

<h5 id="授权码模式">授权码模式</h5>

<p>是功能最完整，流程最严密的授权模式，它的特点是通过客户端的后台服务器，与“服务提供商”的认证服务器进行互动。</p>

<p>A. 用户访问客户端，后者将前者导向认证服务器
B. 用户选择是否给予客户端授权
C. 假设用户给予授权，认证服务器将向用户导向客户端事先指定的“重定向URI”，同时附上一个授权码
D. 客户端收到授权码，附上早先的“重定向URI”，向认证服务器申请令牌，这一步是在客户端的后台的服务器上完成的，对用户不可见。
E. 认证服务器核对了授权码和重定向URI，确认无误后，向客户端发送访问令牌（access_token）和更新令牌(refresh token)</p>

<p>A 步骤中，客户端申请认证的URI，包含以下参数</p>

<ul>
<li>response_type: 表示授权类型，必选项，此处的值固定为“code”</li>
<li>client_id: 表示客户端ID，必选项</li>
<li>redirect_uri: 表示重定向URI，可选项</li>
<li>scope: 表示申请的授权范围，可选项</li>
<li>state: 表示客户端当前状态，可以指定任意值，认证服务器会原封不动的返回这个值。</li>
</ul>

<pre><code>GET /authorize?response_type=code&amp;client_id=s6BhdRkqt3&amp;state=xyz
        &amp;redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com

</code></pre>

  </div>
</div>
<div class="container has-text-centered">
    
</div>

<div class="container has-text-centered">
  
</div>
<section class="section">
  <div class="container has-text-centered">
    <p></p>
  </div>
</section>


